依存関係逆転の原則 (DIP)
Dependency Inversion Principle, DIP
不安定なもの→安定なものという依存関係を保つための手段の一つ
具象A→Interface←具象Bとできる
これの嬉しさは後述
前提として、依存するものは抽象でありたい、というのがある
抽象は安定していて、具象は不安定
Interfaceは修正されづらいものという前提がある
不安定なものに依存すると、変更された時に他の場所にも影響が及ぶ
最高に非現実的な理想を言えば、モジュールたちは全て抽象のみに依存したい
極論を言えばインスタンスを作るときも参照したくない
が、実際問題無理なので、以下のように言い換える
「変化しやすい具象要素に依存しないようにしたい」
依存関係を逆転することの何が嬉しいか
思うに、『Clean Architecture』.iconの11章を読むだけでは理解できない
前提がこの章には書かれていないから
サービスを作る上でのパーツを分けて、依存関係を「外側→内側」にしたい これを実現するためにDIPみたいな原則がある
具体例
レイヤー的にはこうしたい
https://gyazo.com/3867dbb98427e6679fef237bdb18192a
しかし、どうしてもこうなっちゃうことはよくある
A, B, Cは具象クラス
https://gyazo.com/c9b770cdae0865c36449ca960a66e6d8
こうなると、そもそも目指していたレイヤーごとの依存関係が崩れる
レイヤーごとの依存関係自体は本質ではない
なので、これを回避したい
ここで、DIPを用いる
https://gyazo.com/42c250d371f780cabdfda9f02aba3d3f
内側にInterfaceを用意することで「内」と「外」の依存関係が逆転する
こうすることで、実装も実現し、依存関係の秩序も保たれる
不安定な外側に修正があったとしても、内側に影響はない
これB → <I>なはずなので、図が間違ってるなmrsekut.icon
参考